package com.example.demo.pattern.mixpattern.observer;

import java.util.ArrayList;

/**
 * 策略模式和观察者模式的组合，由本类实现观察者接口。
 * 本类就类似一个观察者的代理对象。具体类持有本类，调用本类注册、通知即可，具体实现由本类完成
 */
public class Observable implements QuackObservable {
    private final ArrayList<Observer> observers = new ArrayList<Observer>();
    private final QuackObservable duck;

    public Observable(QuackObservable duck) {
        this.duck = duck;
    }

    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void notifyObservers() {
        observers.forEach(t -> t.update(duck));
    }
}
